iT邦幫忙

2023 iThome 鐵人賽

DAY 30
1

終於來到最後一篇了,我們前面寫了這麼多程式跟測試,那要什麼時候執行測試?

理論上,你隨時都應該做。特別是 merge branch 回 develop 的時候。但是人總是偷懶的,而且如果測試越來越多,即使每個都只花幾秒,跑完可能也要10幾分鐘了,人生有限,不要浪費在等待上。所以我們可以善用一些自動化工具。

基本上大家應該都會使用 Github,就算是私人架設的也有 Gitlab,它們都有類似的功能可以寫腳本來執行一些命令。就讓我們來用 Github 的 Action 來在每次 push develop 時觸發測試。

由於 Airflow 跟 Flink 是不同語言,我建議是分兩個 git 庫來存放。

Airflow

確保將這個 YAML 檔案放在你的專案的 .github/workflows 目錄下,並將其命名為任何你喜歡的名稱(例如 pytest.yml)。當你 push 到 develop 分支時,GitHub Actions 會自動運行這個測試工作流程。

name: Run pytest on Push to develop

on:
  push:
    branches:
      - develop

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8  # 目前 Airflow 2.7.1 版支援的最低 Python 版本

    - name: Install dependencies
      run: pip install -r requirements.txt  # 如果你有 requirements.txt 檔案的話

    - name: Run pytest
      run: pytest

Flink

在 Flink 這邊,我們可以多做一點事。因為 Java 需要 package 出一個 jar 檔,所以我們除了測試之外,當我們 push 回 master 並下 tag 時,再呼叫 package 來打包出我們要的 jar 檔

name: Java Build and Release

on:
  push:
    branches:
      - develop
  push:
    tags:
      - '*'

jobs:
  build-and-release:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up JDK
      uses: actions/setup-java@v2
      with:
        java-version: '11'  # 選擇你的 Java 版本,例如 8、11、16 等

    - name: Build with Maven
      run: mvn clean package

    - name: Upload JAR to Release
      if: startsWith(github.ref, 'refs/tags/')
      run: |
        RELEASE_TAG="${GITHUB_REF/refs\/tags\//}"
        echo "Creating a release for tag $RELEASE_TAG"
        # Create a GitHub release using the jar file
        gh release create "$RELEASE_TAG" target/your-java-project.jar
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

這個 GitHub Actions workflow 包含以下步驟:

  1. 檢出你的程式碼。
  2. 設置選定的 Java 版本。
  3. 使用 Maven 構建專案。你需要確保你的專案中有 Maven 配置(pom.xml)。
  4. 如果是在 tag 上推送(即發布版本),它會上傳 JAR 文件到 GitHub Release。它會擷取 tag 名稱作為版本號,然後使用 GitHub CLI (gh) 工具來建立 Release。

確保將這個 YAML 檔案放在你的 Java 專案的 .github/workflows 目錄下,並將其命名為任何你喜歡的名稱(例如 java-build-and-release.yml)。當你 push 到 develop 分支時,或者當你創建一個 tag 時,GitHub Actions 會執行相應的工作流程。


尾聲結語

在這次的鐵人賽中,我挑選了一個相當龐大的主題,因此有許多細節我無法深入探討,也無法提供更多實際範例。同時,在撰寫的過程中,我也意識到了自己知識的一些不足之處。

幸運的是,現在有了 ChatGPT,它在快速生成草稿後,再經過一些個人風格的修飾,幫助我輕鬆完成文章並發佈。否則,有好幾次我都陷入了困境。

我希望透過我的文章,讀者能夠更深入地了解 Airflow 和 Flink 的寫作方式和應用。雖然工具的熟練使用非常重要,但我們也應該注意不要過度依賴單一工具,而要多接觸不同的知識和工具,這樣我們的工作能夠更加得心應手。


上一篇
來用 TDD 開發 Airflow DAG 吧 - Day29
系列文
用 Airflow & Flink 來開發 ETL 吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言